<?php
/**
 * 检测顶级域名
 * @author 蓝优
 */
declare(strict_types=1);

$method = new CheckDomain();

echo $method->check('https://fanyi.baidu.com/');

class CheckDomain
{
    public function check($link)
    {
        $url = $link ? $link : $_SERVER['HTTP_HOST'];
        $domain = $this->determine($url);
        if (preg_match($this->suffix(), $url)) {
            return preg_replace('/^.*?\.([A-z0-9-]+\.[A-z]+\.[A-z]{2,7})$/', '$1', $domain);
        } else {
            return preg_replace('/^.*?\.([A-z0-9-]+\.[A-z]{2,7})$/', '$1', $domain);
        }
    }
    
    private function determine($url)
    {
        $is = PHP_VERSION >= 8.0 ? str_contains($url, '://') : preg_match("/^http(s)?:\\/\\/.+/", $url);
        if ($is) {
            $result = parse_url($url, PHP_URL_HOST);
        } else {
            $result = strtolower($url);
        }
        return $result;
    }
    /**
     * 校验域名后缀
     */
    private function suffix()
    {
        return '/\.(ac\.cn|com\.cn|edu\.cn|gov\.cn|mil\.cn|net\.cn|org\.cn|bj\.cn|sh\.cn|tj\.cn|cq\.cn|he\.cn|sx\.cn|nm\.cn|ln\.cn|jl\.cn|hl\.cn|js\.cn|zj\.cn|ah\.cn|fj\.cn|jx\.cn|sd\.cn|ha\.cn|hb\.cn|hn\.cn|gd\.cn|gx\.cn|hi\.cn|sc\.c
n|gz\.cn|yn\.cn|xz\.cn|sn\.cn|gs\.cn|qh\.cn|nx\.cn|xj\.cn|tw\.cn|hk\.cn|mo\.cn|com\.af|net\.af|org\.af|com\.ag|net\.ag|org\.ag|co\.at|or\.at|com\.bi|edu\.bi|info\.bi|mo\.bi|or\.bi|org\.bi|com\.br|net\.br|org\.br|co\.bz|com\.bz|net\.
bz|org\.bz|co\.cm|com\.cm|net\.cm|com\.co|net\.co|nom\.co|ar\.com|br\.com|cn\.com|de\.com|eu\.com|gb\.com|gr\.com|hu\.com|jpn\.com|kr\.com|no\.com|ru\.com|se\.com|uk\.com|us\.com|za\.com|com\.de|co\.dm|com\.ec|fin\.ec|info\.ec|med\.
ec|net\.ec|pro\.ec|com\.es|nom\.es|org\.es|co\.gg|net\.gg|org\.gg|co\.gl|com\.gl|edu\.gl|net\.gl|org\.gl|com\.gr|co\.gy|com\.gy|net\.gy|com\.hk|edu\.hk|gov\.hk|idv\.hk|net\.hk|org\.hk|com\.hn|net\.hn|org\.hn|adult\.ht|com\.ht|info\.
ht|net\.ht|org\.ht|org\.il|co\.in|firm\.in|gen\.in|ind\.in|net\.in|org\.in|bz\.it|co\.it|co\.je|net\.je|org\.je|com\.ki|net\.ki|org\.ki|co\.kr|ne\.kr|or\.kr|pe\.kr|re\.kr|seoul\.kr|com\.lc|net\.lc|org\.lc|co\.mg|com\.mg|net\.mg|org\
.mg|ac\.mu|co\.mu|com\.mu|net\.mu|org\.mu|com\.mx|gb\.net|hu\.net|jp\.net|se\.net|uk\.net|com\.nf|net\.nf|org\.nf|co\.nl|net\.nz|org\.nz|ae\.org|us\.org|com\.pe|net\.pe|org\.pe|com\.ph|com\.pk|net\.pk|org\.pk|biz\.pl|com\.pl|info\.p
l|net\.pl|org\.pl|waw\.pl|aaa\.pro|aca\.pro|acct\.pro|avocat\.pro|bar\.pro|cpa\.pro|eng\.pro|jur\.pro|law\.pro|med\.pro|recht\.pro|com\.ps|net\.ps|org\.ps|com\.pt|edu\.pt|org\.pt|com\.ru|net\.sb|org\.sb|com\.sc|net\.sc|org\.sc|com\.
sg|com\.so|net\.so|org\.so|club\.tw|com\.tw|ebiz\.tw|game\.tw|idv\.tw|org\.tw|me\.uk|org\.uk|co\.uz|com\.uz|com\.vc|net\.vc|org\.vc|ac\.vn|biz\.vn|com\.vn|edu\.vn|gov\.vn|health\.vn|info\.vn|int\.vn|name\.vn|net\.vn|org\.vn|pro\.vn)$/';
    }
}
